# Permissions

Permissions enable the [toggling of Puck features](/docs/integrating-puck/feature-toggling). There are three types of permissions:

1. **Global permissions** are shared across the entire Puck application. Controlled via the `permissions` prop on the `<Puck>` component.
2. **Component permissions** allow feature control across for all instances of a given component type. Controlled by the `permissions` component config API.
3. **Dynamic permissions** enable control after each data change, and are ideal for per-instance component permissions. Controlled by the `resolvePermissions` component config API.

## APIs

### Setting permissions

1. Global [`permissions` prop](/docs/api-reference/components/puck#permissions)
2. Component [`permissions` parameter](/docs/api-reference/configuration/component-config#permissions)
3. Component [`resolvePermissions` parameter](/docs/api-reference/configuration/component-config#resolvepermissionsdata-params)

### Extending permissions

1. `getPermissions`
2. `refreshPermissions`

## Supported permissions

| Param                     | Example           | Type    | Default     | Status |
| ------------------------- | ----------------- | ------- | ----------- | ------ |
| [`delete`](#delete)       | `delete: true`    | Boolean | `true`      | -      |
| [`drag`](#drag)           | `drag: true`      | Boolean | `true`      | -      |
| [`duplicate`](#duplicate) | `duplicate: true` | Boolean | `true`      | -      |
| [`edit`](#edit)           | `edit: true`      | Boolean | `true`      | -      |
| [`insert`](#insert)       | `insert: true`    | Boolean | `true`      | -      |
| [`...custom`](#custom)    | `myPerm: true`    | Boolean | `undefined` | -      |

### `delete`

Enable deletion of components.

### `drag`

Enable component dragging. Disabling this will lock the component in place, but other components can still be dragged around it.

### `duplicate`

Enable duplication of components.

### `edit`

Enable field editing. This is the same as setting `readOnly` to `true` for all fields.

### `insert`

Enable insertion of new components. Disabling this will disable the component list items.

### `...custom`

Custom permissions enable you to control your own functionality when [extending Puck](/docs/extending-puck/composition).
